/**
 * @Author       : Hejh(3010733382@qq.com)
 * @Version      : V1.0
 * @Date         : 2024-05-03 19:19:14
 * @Description  : webWorker进行文件hash计算
 */
import SparkMD5 from 'spark-md5'

self.onmessage = (e) => {
  console.log(e.data,'111');
  
  const { file, chunkSize = 1024 * 1024 * 25 } = e.data
  // 分片尺寸（1M）
  // const chunkSize = 1024 * 1024
  // 分片数量
  const chunkCount = Math.ceil(file.size / chunkSize)
  // 当前chunk的下标
  let chunkIndex = 0
  // 使用ArrayBuffer完成文件MD5编码
  const spark = new SparkMD5.ArrayBuffer()
  const fileReader = new FileReader() // 文件读取器
  const chunks: any[] = [] // 分片信息数组
  // 读取一个分片后的回调
  fileReader.onload = function (e: any) {
    spark.append(e.target.result) // 分片数据追加到MD5编码器中
    // 当前分片单独的MD5
    const chunkMD5 = SparkMD5.ArrayBuffer.hash(e.target.result) + chunkIndex
    chunkIndex++
    chunks.push({
      id: chunkMD5,
      content: new Blob([e.target.result])
    })
    if (chunkIndex < chunkCount) {
      loadNext() // 继续读取下一个分片
    } else {
      // 读取完成
      const fileId = spark.end()
      self.postMessage({
        fileId,
        size: file.size,
        filename: file.name,
        chunks
      })
    }
  }
  // 读取下一个分片
  function loadNext() {
    const start = chunkIndex * chunkSize,
      end = start + chunkSize >= file.size ? file.size : start + chunkSize
    fileReader.readAsArrayBuffer(file.slice(start, end))
  }
  loadNext()
}
